"""
	队列是限制在两端进行插入操作和删除操作的线性表,允许进行存入操作的一端称为
		"队尾",允许进行删除操作的一端称为"队头"
	特点:
		队列只能在队头和队尾进行数据操作
		队列模型具有先进先出或者后进后出的规律
	队列操作:
		入队,出队,判断队列的空满等操作
"""


class QueueError(Exception):
	pass


class SQueue:
	def __init__(self):
		self._elems = []

	# 入队
	def en_queue(self, value):
		self._elems.append(value)

	# 出队
	def end_queue(self):
		if not self._elems:
			raise QueueError("列表为空")
		return self._elems.pop(0)

	# 判断列队是否为空
	def is_empty(self):
		return self._elems == []

if __name__ == '__main__':
	sq = SQueue()
	for i in range(5):  # 入队
		sq.en_queue(i)

	# 翻转一次
	from day2_栈.栈模型顺序存储1 import *
	st = Stack()
	# 循环出栈入栈
	while not sq.is_empty():
		st.push(sq.end_queue())
	# 循环出栈入队
	while not sq.is_empty():
		sq.en_queue(st.pop())
	# 这里并不能生效, 因为夸文件夹导入不能运行

	while not sq.is_empty():    # 出队
		print(sq.end_queue())